#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"QFileDialog"
#include<iostream>
using namespace std;

#define N 41          //关键字个数
#define SIZE 256
#define MAXLEN 20      //关键字数组长度
#define HASHLEN 41    //哈希表长度


struct hashtable      //结构体数组哈希表
{
    char* hash1;      //指向关键字的指针
    int count;        //记录频度数
    int count1;
};


namespace Ui {

   class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    void Hashfunc(char str[]);        //将关键字根据哈希函数放入哈希表的指定位置
    void Hashfunc1(char str[]);        //将关键字根据哈希函数放入哈希表的指定位置
    int Hashfind(char* words);        //在哈希表中找是否该word为关键字，并记录频度
    int Hashfind1(char* words);        //在哈希表中找是否该word为关键字，并记录频度
    void creathash(void);             //创建哈希表
    int readc(int I);                 //读取源程序文件中的单词
    int isletter(char ch);            //判断是否为字母
    int getkey(char* str, int len);   //读取该单词的关键码
    int getkey1(char* str, int len);   //读取该单词的关键码
    void resethash(int n);            //重置哈希表
    void copycount(int x[], int n);   //将频数拷贝到数组里
    int STREET_D(int*x1, int*x2);     //求街区距离
    int OM_D(int* x1, int* x2);       //求欧式距离
    int STREET_D1(int*x1, int*x2);     //求街区距离
    int OM_D1(int* x1, int* x2);       //求欧式距离
    double OM_similarity(int k);           //根据欧式距离计算相似度
    double STREET_similarity(int k);       //根据街区距离计算相似度
    ~MainWindow();                    //析构函数

private slots:
    void on_pushButton_clicked();     //选择第一个文件的按钮监听函数

    void on_pushButton_2_clicked();   //选择第二个文件的按钮监听函数

    void on_pushButton_3_clicked();   //检查按钮的按钮监听函数

    void on_pushButton_4_clicked();   //选择关键词文件的按钮监听函数

private:
    QString file1;                 //第一个文件名
    QString file2;                 //第二个文件名
    QString keyword_file;          //关键词文件名
    Ui::MainWindow *ui;            //图形界面指针
    hashtable hasht[HASHLEN];      //哈希表数组
    hashtable hasht1[200];         //哈希表数组
    int x1[HASHLEN], x2[HASHLEN];  //存储频度数的数组
    int x3[81], x4[81];          //存储频度数的数组

};

#endif // MAINWINDOW_H
